import java.io.File;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {

        /*从键盘输入查询的文件的地址然后得出未交的人的姓名，学号，以及其历史未交此数*/

        List<String> list = new ArrayList<>();   //用来存放每一个学生的学号

        while (true) {
            System.out.println("请输入检查作业的文件夹的存放地址.比如在C盘的C文件夹下则输入: C:" +"\\" + "\\"  + "c");   //按照格式输入文件的存放地址

            Scanner sc = new Scanner(System.in);
            String path = sc.nextLine();         //输入文件的地址

            File file = new File(path);
            String[] files = file.list();    //提取文件下的每一个学生文件

            try {
                for (String f : files) {
                    Matcher matcher = Pattern.compile("班(\\d+)(\\S+)实验").matcher(f);  //利用正则表达式提取学生的学号信息
                    while (matcher.find()) {
                        String s = matcher.group(1);
                        list.add(s);   //取得每一个人的学号并放入list集合中
                    }
                }

                if(list.size() == 0) {  //检测提取的信息是否有误。
                    System.out.println("此文件夹下不存在任何学生的有关文件，请确认学生的文件的存放地址或者学生文件的命名方式的正确性.");
                    System.out.println();
                }else {
                    break;
                }

            } catch (NullPointerException e) {
              System.out.println("输入文件名错误或者文件不存在.");
                System.out.println();
            }
        }

        //进行数据库操作
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");    //加载驱动程序
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        Connection connection = null;
        Statement query = null;    //声明一个查询全体学生的一个对象
        Statement update = null;      //声明一个更新对象

        try {
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/java_2017?serverTimezone=UTC & characterEncoding=utf8",
                    "root",
                    "193749");

            query = connection.createStatement();
            update = connection.createStatement();

            ResultSet resultSet = query.executeQuery("SELECT * FROM  student");

            while (resultSet.next() == true) {
                String s = resultSet.getString(1);

                if (list.contains(s)) {  //如果list集合中包含有数据库中的学生的学号，则该学生交了，否则打印该学生未交。

                } else {

                    System.out.print("此次作业" + resultSet.getString(1));      //获得未交学号
                    System.out.print(resultSet.getString(2) + "未交 ");      //  获得未交姓名
                    System.out.println("其总计未交此数:" + (resultSet.getInt(3) + 1));  //其总计未交此数

                    int num = resultSet.getInt(3) + 1;    //将每一个人的总计未交此数加1
                    update.executeUpdate("UPDATE student SET history =" + num + "  WHERE number =" + s);  //更新总计未交此数
                }
            }

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                connection.close();
                query.close();
                update.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
